package com.base.pub.persistence;

import java.io.Serializable;
import java.util.List;

import org.hibernate.SessionFactory;
import org.springframework.dao.DataAccessException;

public interface IBaseDao {

	/**
	 *  @description:
	 *  @author songxy  DateTime 2017年5月25日 上午11:46:31
	 *  @return
	 */

	SessionFactory getSessionFactory();

	/**
	 *  @description:
	 *  @author songxy  DateTime 2017年5月25日 上午11:46:31
	 *  @param entityClass
	 *  @param ids
	 *  @return
	 */

	<T> List<T> getEntityByIds(Class<T> entityClass, Long[] ids);

	/**
	 *  @description:
	 *  @author songxy  DateTime 2017年5月25日 上午11:46:31
	 *  @param entityName
	 *  @return
	 *  @throws DataAccessException
	 */

	Long getCount(String entityName) throws DataAccessException;

	/**
	 *  @description:
	 *  @author songxy  DateTime 2017年5月25日 上午11:46:31
	 *  @param entity
	 *  @throws DataAccessException
	 */

	void update(Object entity) throws DataAccessException;

	/**
	 *  @description:
	 *  @author songxy  DateTime 2017年5月25日 上午11:46:31
	 *  @param entity
	 *  @throws DataAccessException
	 */

	<T> void saveOrUpdate(T entity) throws DataAccessException;

	/**
	 *  @description:
	 *  @author songxy  DateTime 2017年5月25日 上午11:46:31
	 *  @param entityClass
	 *  @param id
	 *  @return
	 *  @throws DataAccessException
	 */

	<T> T get(Class<T> entityClass, Serializable id) throws DataAccessException;

	/**
	 *  @description:
	 *  @author songxy  DateTime 2017年5月25日 上午11:46:31
	 *  @param entityClass
	 *  @return
	 *  @throws DataAccessException
	 */

	<T> List<T> findAll(Class<T> entityClass) throws DataAccessException;

	/**
	 *  @description:
	 *  @author songxy  DateTime 2017年5月25日 上午11:46:31
	 *  @param queryString
	 *  @param args
	 *  @return
	 *  @throws DataAccessException
	 */

	List<?> findAll(String queryString, Object... args)
			throws DataAccessException;

}